﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Collections.ObjectModel;

namespace EntitiesLayer
{
    
    public sealed class Rol: IEntity
    {
        private readonly int idRol;

        public int Id
        {
            get { return idRol; }
     
        }
        private readonly string nombre;

        public  string Nombre
        {
            get { return nombre; }
            
        }
        
        private readonly Lazy<IList<Permiso>> listaPermisos;
        public IList<Permiso> ListaPermisos
        {

            get{
            
                return listaPermisos.NullSaveValue();
            }
        }




        public Rol(string nombre, Lazy<IList<Permiso>> listaPermisos = null, int idRol=0)
        {
            
            if ((nombre == null || nombre.Equals("")))
                throw new ArgumentNullException();

            this.idRol = idRol;
            this.nombre = nombre;
            this.listaPermisos = listaPermisos;
        }

        public Rol(int idRol) :this("Anomino", idRol:idRol){}

        public Rol CambiarNombre(string nombre) {

            return new Rol(nombre, listaPermisos, Id);
        }

        public override int GetHashCode()
        {
            return Id.GetHashCode();
        }
        public override bool Equals(object obj)
        {
            if (obj == this)
                return true;

            Rol obj1 = obj as Rol;

            if (obj1 == null)
                return false;

            return this.Id == obj1.Id;

        }


        public override string ToString()
        {
                return  Nombre;

        }


    }
}
